package _11_整理题目._6_模拟设计._位运算;

/**
 * 给定一个整数数组 nums，其中恰好有两个元素只出现一次，其余所有元素均出现两次。
 * 找出只出现一次的那两个元素。你可以按 任意顺序 返回答案。
 *
 *
 *
 */
public class _02_只出现一次的两个数 {

    public int[] singleNumber(int[] nums) {
        if(nums==null || nums.length < 2) return new int[]{0};

        int ans = 0;
        for(int num : nums) {
            ans ^= num;
        }

        int ans_ = 0;
        int rightOne = ans & (~ans+1);
        for(int num : nums) {
            if((rightOne & num) != 0) {
                ans_ ^= num;
            }
        }
        return new int[] {ans_, ans^ans_};
    }



}
